<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="../static/css/prism.css" rel="stylesheet" />
    <link href="../static/css/style.css" rel="stylesheet" />
    <title>Document</title>
</head>

<body>
    <div class="emphasize">
        <p>在 JavaScript 中，当使用 new 操作符来创建一个对象实例时，如果构造函数没有参数，那么括号 () 是可选的。</p>
        <p>如<code class="language-javascript">var date = new Date;</code>和<code
                class="language-javascript">var date = new Date();</code>效果相同。两者都会调用 Date 构造函数并创建一个包含当前日期和时间的新 Date 对象。
        </p>
        <p>这种语法上的便利主要是为了简化代码，使其在某些情况下更简洁。JavaScript 规范允许省略参数为空的构造函数调用中的括号。</p>
        <p>在其他的一些内置对象中也适用，例如 Array 和 Object：</p>
        <pre><code class="language-javascript">var arr1 = new Array;
var arr2 = new Array();
var obj1 = new Object;
var obj2 = new Object();</code></pre>
    </div>

    <h1>Date 对象</h1>
    <p>JavaScript 原生的时间库。</p>
    <p>以1970年1月1日00:00:00作为时间的零点（单位毫秒），可以表示的时间范围是前后各1亿天</p>

    <h2>Date.now() 方法</h2>
    <p>返回当前时间距离时间零点（1970年1月1日 00:00:00 UTC）的<strong>毫秒</strong>数，相当于 Unix 时间戳乘以1000</p>
    <pre><code class="language-javascript">Date.now()  // 1729260088337</code></pre>
    <p style="font-family: Kaiti;">在python中，time.time()方法返回时间戳，单位为秒，如1729260161.9282184</p>

    <h3>时间戳</h3>
    <p>时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。</p>
    <p>格林威治和北京时间就是时区的不同。</p>
    <p>Unix是20世纪70年代初出现的一个操作系统，Unix认为1970年1月1日0点是时间纪元。JavaScript也就遵循了这一约束</p>

    <h2>Date 对象一系列的 get 方法</h2>
    <p>getTime()：返回实例距离1970年1月1日00:00:00的毫秒数</p>
    <p></p>getDate()：返回实例对象对应每个月的几号（从1开始）</p>
    <p></p>getDay()：返回星期几，星期日为0，星期一为1，以此类推</p>
    <p></p>getYear()：返回距离1900的年数</p>
    <p></p>getFullYear()：返回四位的年份</p>
    <p></p>getMonth()：返回月份（0表示1月，11表示12月）</p>
    <p></p>getHours()：返回小时（0-23）</p>
    <p></p>getMilliseconds()：返回毫秒（0-999）</p>
    <p></p>getMinutes()：返回分钟（0-59）</p>
    <p></p>getSeconds()：返回秒（0-59）</p>

    <script src="../static/js/prism.min.js"></script>

    <script>
        console.log(Date.now());  // 静态方法，可以直接调用 Date.now() 返回时间戳
        var date = new Date;// 当前的实际时间
        console.log(date.getTime());  // 实例方法，需要先创建一个 Date 对象，然后调用该对象的方法

        // 可以传参
        // 注意需要加上 new 关键字，传入的参数才有效，否则按照当前的实际时间处理
        console.log(new Date(1729501751288));  // Mon Oct 21 2024 17:09:44 GMT+0800 (中国标准时间)

        var week = date.getDay();  // 星期几
        console.log(week);
        var day = date.getDate();  // 几号
        console.log(day);

        // 获得本年度的剩余天数
        function getDaysRemainingInYear() {
            const now = new Date();
            // 获取当前年份
            const currentYear = now.getFullYear();  // 2024
            // 创建当前年份的最后一天日期对象
            const endOfYear = new Date(currentYear, 11, 31);  // Tue Dec 31 2024 00:00:00 GMT+0800 (中国标准时间)
            // 计算两个日期之间的时间差（以毫秒为单位）
            const timeDifference = endOfYear.getTime() - now.getTime();  // 6069931594
            // 将时间差转换为天数
            // 一天的毫秒数：1000 * 60 * 60 * 24，除以这个数得到的结果就是有几天
            const daysRemaining = Math.ceil(timeDifference / (1000 * 60 * 60 * 24));  // ceil 向上取整
            return daysRemaining;
        }

        console.log("本年度剩余天数为：", getDaysRemainingInYear());
    </script>
</body>

</html>